<?php

include_once("../dao/conexao_class.php");
include_once("../model/especialidade_model_class.php");

class EspecialidadeDAO {

    private $insert = "INSERT INTO especialidade(esp_nome) values(?);";
    private $update = "UPDATE especialidade SET esp_nome = ? WHERE esp_id = ?;";
    private $delete = "DELETE FROM especialidade WHERE esp_id = ?;";
    private $select = "SELECT * FROM especialidade;";
    private $select_especialidade = "SELECT * FROM especialidade WHERE esp_nome = ?";
    private $select_especialidade_by_id = "SELECT * FROM especialidade WHERE esp_id = ?";
    private $select_func_espec = "select especialidade.esp_id, especialidade.esp_nome from especialidade,
            funcionario_especialidade where funcionario_especialidade.esp_id = especialidade.esp_id AND fun_id = ?;";

    function insert($objEspecialidade) {
        //conectando ao banco
        $objConn = new Conexao();
        $conn = $objConn->conecta();
//        var_dump($conn);
        //criando o preparedStatment
        if ($stm = $conn->prepare($this->insert)) {

            $stm->bind_param("s", $objEspecialidade->getNome());

            if ($stm->execute()) {
                $conn->close();
                return true;
            } else {
                $conn->close();
                return false;
            }
        } else {
            return false;
        }
    }

    function update($objEspecialidade) {

        $objConn = new Conexao();
        $conn = $objConn->conecta();

        if ($stm = $conn->prepare($this->update)) {

            $stm->bind_param("si", $objEspecialidade->getNome(), $objEspecialidade->getFuncionario());
//            $stm->bind_param("i",);

            if ($stm->execute()) {
                $conn->close();
                return true;
            } else {
                $conn->close();
                return false;
            }
        }
        return false;
    }

    function delete($id) {

        $objConn = new Conexao();
        $conn = $objConn->conecta();

        if ($stm = $conn->prepare($this->delete)) {

            $stm->bind_param("i", $id);

            if ($stm->execute()) {
                $conn->close();
                return true;
            } else {
                $conn->close();
                return false;
            }
        }
        return false;
    }

    function findAllEspecialidade() {

        $objConn = new Conexao();
        $conn = $objConn->conecta();
        $lista = array();
        if ($stm = $conn->prepare($this->select)) {

            $stm->execute();

            //atribui o resultado encontrado as variaveis
            $stm->bind_result($id, $nome);

            
            //para cada resultado encontrado
            
            while ($stm->fetch()) {
//                echo "Funcionario: ".$id." Descrição: ".$nome."<br>";
                $espec = new EspecialidadeModel();
                $espec->setId($id);
                $espec->setNome($nome);
                $lista[] = $espec;
            }

            $conn->close();
            return $lista;
        }
    }
    
    function findAllEspecialidadeJSON() {

        $objConn = new Conexao();
        $conn = $objConn->conecta();
        $lista = array();
        if ($stm = $conn->prepare($this->select)) {

            $stm->execute();

            //atribui o resultado encontrado as variaveis
            $stm->bind_result($id, $nome);


            //para cada resultado encontrado
            
            while ($stm->fetch()) {
//                echo "Funcionario: ".$id." Descrição: ".$nome."<br>";
                $lista['especialidades'][] = array(
                    'id' => $id,
                    'nome' => $nome
                );
            }

            $conn->close();
            return $lista;
        }
    }
    
    function existe($especialidade) {

        $objConn = new Conexao();
        $conn = $objConn->conecta();

        if ($stm = $conn->prepare($this->select_especialidade)) {
            
            $stm->bind_param("s", $especialidade);
            
            $stm->execute();

            //atribui o resultado encontrado as variaveis
            $stm->bind_result($id, $nome);


            //para cada resultado encontrado
            $i = 0;
            $lista = array();
            while ($stm->fetch()) {
//                echo "Funcionario: ".$id." Descrição: ".$nome."<br>";
                $lista[$i++] = array(
                    'id' => $id,
                    'nome' => $nome
                );
            }

            $conn->close();
            if(count($lista) != 0){
                return true;
            }else{
                return false;
            }
        }
    }
    
            
    function findEspecialidadeById($id) {

        $objConn = new Conexao();
        $conn = $objConn->conecta();
        $espM = new EspecialidadeModel();
        if ($stm = $conn->prepare($this->select_especialidade_by_id)) {
            
            $stm->bind_param("i", $id);
            
            $stm->execute();

            //atribui o resultado encontrado as variaveis
            $stm->bind_result($id, $nome);

            while ($stm->fetch()) {
//                echo "Funcionario: ".$id." Descrição: ".$nome."<br>";
                $espM = new EspecialidadeModel();
                $espM->setId($id);
                $espM->setNome($nome);
                $conn->close();
                return $espM;
            }

            
        }
        $conn->close();
        return $espM;
    }
            
    function findEspecialidadeByFuncionario($funcionario) {

        $objConn = new Conexao();
        $conn = $objConn->conecta();
        $espM = new EspecialidadeModel();
        $lista = array($espM);
        if ($stm = $conn->prepare($this->select_func_espec)) {
            
            $stm->bind_param("i", $funcionario);
            
            $stm->execute();

            //atribui o resultado encontrado as variaveis
            $stm->bind_result($id, $nome);


            //para cada resultado encontrado
            $i = 0;
            while ($stm->fetch()) {
                $espM = new EspecialidadeModel();
                
                $espM->setId($id);
                $espM->setNome($nome);
                $lista[$i++] = $espM;
            }

        }
        $conn->close();
        return $lista;
    }
    
}

//$teste = new EspecialidadeDAO();
//$esp = new EspecialidadeModel();
////$esp->setFuncionario(3);
//$esp->setNome("Administraçao");
//
////$esp = 3;
//if($teste->insert($esp)){
//    printf("Deletado com sucesso!");
//}else{
//    printf("Erro ao deletar!");
//}
//
//var_dump($teste->findAllEspecialidade());

